Skip to content

chore: drop ESLint in favor of Biome#104

Open
kyscott18 wants to merge 1 commit into
chore/root-pnpm-workspacefrom
chore/biome-only-lint
Open

chore: drop ESLint in favor of Biome#104
kyscott18 wants to merge 1 commit into
chore/root-pnpm-workspacefrom
chore/biome-only-lint

Conversation

@kyscott18

Copy link
Copy Markdown

Consolidates linting on Biome and removes ESLint.

Rationale

  • Next 16 removed the built-in ESLint integration (next lint + lint-at-build). ESLint here was opt-in and not wired into CI or the build, so eslint-config-next's @next/next rules weren't actually enforced.
  • Biome (already the CI lint job via biome ci) covers linting + formatting + import organization, plus rules-of-hooks and a large chunk of jsx-a11y.
  • No regression vs. what's enforced today. Tradeoff: the Next-specific @next/next rules (no Biome equivalent) are no longer available — but they weren't enforced before this change either.

Changes

  • Remove the "lint": "eslint" script and the eslint / eslint-config-next devDependencies from frontend/package.json.
  • Delete frontend/eslint.config.mjs.
  • Drop "eslint.enable" from .vscode/settings.json (Biome is the formatter/linter).
  • Update root pnpm-lock.yaml (removes eslint + ~300 transitive deps).

Verification (pnpm 10, Node 22, locally)

  • pnpm install --frozen-lockfile
  • pnpm typecheck
  • biome ci ✓ (only the pre-existing noNonNullAssertion warning)

Stacked on #103 (linear: #100#101#103 → this). Retarget base to main once the lower PRs merge.

Next 16 removed the built-in ESLint integration (next lint), and ESLint
wasn't wired into CI or the build, so eslint-config-next's @next/next rules
weren't being enforced anyway. Biome (run in the CI lint job) owns linting +
formatting + import organization going forward.

- Remove the 'lint': 'eslint' script and the eslint / eslint-config-next
  devDependencies from frontend/package.json.
- Delete frontend/eslint.config.mjs.
- Drop 'eslint.enable' from .vscode/settings.json (Biome is the formatter).
- Update root pnpm-lock.yaml (removes eslint + 300 transitive deps).

Verified locally: frozen install, pnpm typecheck, and biome ci all pass.
@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
monode Ready Ready Preview, Comment Jun 9, 2026 8:00pm

Request Review

@greptile-apps

greptile-apps Bot commented Jun 9, 2026

Copy link
Copy Markdown

Greptile Summary

This PR removes ESLint from the frontend package and fully consolidates on Biome, which was already the enforced linter in CI (biome ci) and the default formatter in the VS Code workspace config. The root package.json already exposes "lint": "biome check ." as the canonical lint entry point, so no developer workflow is broken.

  • Deletes frontend/eslint.config.mjs, removes eslint/eslint-config-next devDependencies and the "lint": "eslint" script from frontend/package.json, and strips eslint.enable from .vscode/settings.json.
  • Updates pnpm-lock.yaml to drop ~300 ESLint transitive dependencies; the Biome biome.json (with recommended rules, rules-of-hooks coverage, and jsx-a11y subset) remains the single source of lint truth.

Confidence Score: 5/5

Safe to merge — purely removes ESLint tooling that was never wired into CI or the build, with Biome already covering the linting path end-to-end.

All changed files are tooling/config only: deleted ESLint config, removed devDependencies, dropped an unused VS Code setting, and updated the lockfile. Biome is already the enforced linter in CI and the root workspace lint script remains intact. No application logic, tests, or runtime behaviour is touched.

No files require special attention.

Important Files Changed

Filename Overview
frontend/package.json Removes the lint script and eslint/eslint-config-next devDependencies; linting is now delegated to the root biome check . script and CI biome ci job.
frontend/eslint.config.mjs Deleted ESLint flat-config file that extended eslint-config-next/core-web-vitals and eslint-config-next/typescript; no longer needed once Biome is the sole linter.
.vscode/settings.json Drops eslint.enable: true; Biome VS Code extension is already configured as the default formatter and linter for all relevant file types.
pnpm-lock.yaml Lockfile update removing ~300 ESLint transitive dependencies from the workspace; generated change consistent with the package.json edits.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph Before["Before this PR"]
        A[Developer saves file] --> B[ESLint VS Code extension]
        A --> C[Biome VS Code extension]
        D[CI lint job] --> E["biome ci (enforced)"]
        F["pnpm lint (frontend)"] --> G["eslint (not in CI)"]
    end

    subgraph After["After this PR"]
        H[Developer saves file] --> I[Biome VS Code extension]
        J[CI lint job] --> K["biome ci (enforced)"]
        L["pnpm lint (root)"] --> M["biome check ."]
    end
Loading

Reviews (1): Last reviewed commit: "chore: drop ESLint in favor of Biome" | Re-trigger Greptile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant